/* 
 * Copyright (C) 2008 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.zeroxlab.kubench;

import android.util.Log;

import java.nio.ShortBuffer;
import java.util.ArrayList;

public class GLFace {

    public GLFace() {
        
    }
    
    // for triangles
    public GLFace(GLVertex v1, GLVertex v2, GLVertex v3) {
        addVertex(v1);
        addVertex(v2);
        addVertex(v3);
    }    
    // for quadrilaterals 四边形
    public GLFace(GLVertex v1, GLVertex v2, GLVertex v3, GLVertex v4) {
        addVertex(v1);
        addVertex(v2);
        addVertex(v3);
        addVertex(v4);
    }
        
    public void addVertex(GLVertex v) {
        mVertexList.add(v);
    }
    
    // must be called after all vertices are added
    public void setColor(GLColor c) {
        
        int last = mVertexList.size() - 1;
        if (last < 2) {
            Log.e("GLFace", "not enough vertices in setColor()");
        } else {
            GLVertex vertex = mVertexList.get(last);
            
            // only need to do this if the color has never been set
            if (mColor == null) {
                while (vertex.color != null) {
                    mVertexList.add(0, vertex);
                    mVertexList.remove(last + 1);
                    vertex = mVertexList.get(last);
                }
            }
            
            vertex.color = c;
        }

        mColor = c;
    }
    
    public int getIndexCount() {
        return (mVertexList.size() - 2) * 3;
    }
    
    public void putIndices(ShortBuffer buffer) {
        int last = mVertexList.size() - 1;

        GLVertex v0 = mVertexList.get(0);
        GLVertex vn = mVertexList.get(last);
        
        // push triangles into the buffer
        for (int i = 1; i < last; i++) {
            GLVertex v1 = mVertexList.get(i);
            buffer.put(v0.index);
            buffer.put(v1.index);
            buffer.put(vn.index);
            v0 = v1;
        }
    }
    
    private ArrayList<GLVertex> mVertexList = new ArrayList<GLVertex>();
    private GLColor mColor;
}
